#!/usr/bin/env python3
"""
大样本两样本位置检验 MCP 服务使用示例

本文件包含了各种实际应用场景的示例代码，展示如何使用大样本两样本位置检验MCP服务
解决实际的统计分析问题。
"""

import json
import numpy as np
from server import TwoSampleNonparametricTestAnalyzer

def example_1_product_quality_comparison():
    """
    示例1：产品质量对比分析
    
    场景：某制造公司想要比较两条生产线生产的产品质量是否存在显著差异。
    收集了两条生产线各100个产品的质量评分数据。
    """
    print("=== 示例1：产品质量对比分析 ===")
    
    # 模拟两条生产线的质量评分数据（1-100分）
    np.random.seed(42)
    production_line_a = np.random.normal(85, 8, 100).tolist()  # 均值85，标准差8
    production_line_b = np.random.normal(82, 10, 100).tolist()  # 均值82，标准差10
    
    analyzer = TwoSampleNonparametricTestAnalyzer()
    
    print(f"生产线A样本大小: {len(production_line_a)}")
    print(f"生产线B样本大小: {len(production_line_b)}")
    print(f"生产线A平均分: {np.mean(production_line_a):.2f}")
    print(f"生产线B平均分: {np.mean(production_line_b):.2f}")
    print()
    
    # 自动选择检验方法
    auto_result = analyzer.auto_select_method(production_line_a, production_line_b)
    print("自动方法选择:")
    print(json.dumps(auto_result, ensure_ascii=False, indent=2))
    print()
    
    # 执行Mann-Whitney U检验（非参数检验）
    mw_result = analyzer.mann_whitney_u_test_large(production_line_a, production_line_b)
    print("Mann-Whitney U检验结果:")
    print(json.dumps(mw_result, ensure_ascii=False, indent=2))
    print()
    
    # 结论
    if mw_result['reject_null']:
        print("✅ 结论：两条生产线的产品质量存在显著差异")
    else:
        print("❌ 结论：两条生产线的产品质量无显著差异")
    
    print("=" * 60)
    print()

def example_2_marketing_campaign_effectiveness():
    """
    示例2：营销活动效果评估
    
    场景：电商公司想要评估新的营销策略是否能显著提高用户购买金额。
    收集了实施新策略前后各150个用户的购买金额数据。
    """
    print("=== 示例2：营销活动效果评估 ===")
    
    # 模拟营销活动前后的购买金额数据
    np.random.seed(123)
    before_campaign = np.random.exponential(200, 150).tolist()  # 指数分布，均值200
    after_campaign = np.random.exponential(250, 150).tolist()   # 指数分布，均值250
    
    analyzer = TwoSampleNonparametricTestAnalyzer()
    
    print(f"营销前样本大小: {len(before_campaign)}")
    print(f"营销后样本大小: {len(after_campaign)}")
    print(f"营销前平均购买金额: {np.mean(before_campaign):.2f}元")
    print(f"营销后平均购买金额: {np.mean(after_campaign):.2f}元")
    print()
    
    # 正态性检验
    norm_before = analyzer.normality_test(before_campaign)
    norm_after = analyzer.normality_test(after_campaign)
    
    print("营销前数据正态性检验:")
    print(f"是否符合正态分布: {norm_before['overall_assessment']['is_normal']}")
    print("营销后数据正态性检验:")
    print(f"是否符合正态分布: {norm_after['overall_assessment']['is_normal']}")
    print()
    
    # 由于数据不符合正态分布，使用非参数检验
    mw_result = analyzer.mann_whitney_u_test_large(before_campaign, after_campaign)
    print("Mann-Whitney U检验结果:")
    print(json.dumps(mw_result, ensure_ascii=False, indent=2))
    print()
    
    # 结论
    if mw_result['reject_null']:
        print("✅ 结论：营销活动显著提高了用户购买金额")
    else:
        print("❌ 结论：营销活动对用户购买金额无显著影响")
    
    print("=" * 60)
    print()

def example_3_drug_efficacy_study():
    """
    示例3：药物疗效研究
    
    场景：制药公司想要比较新药与现有药物的疗效差异。
    收集了两组患者各80人的治疗效果评分数据。
    """
    print("=== 示例3：药物疗效研究 ===")
    
    # 模拟两种药物的疗效评分数据（0-10分）
    np.random.seed(456)
    existing_drug = np.random.normal(6.5, 1.5, 80).tolist()  # 现有药物，均值6.5
    new_drug = np.random.normal(7.2, 1.3, 80).tolist()       # 新药，均值7.2
    
    # 确保评分在0-10范围内
    existing_drug = [max(0, min(10, score)) for score in existing_drug]
    new_drug = [max(0, min(10, score)) for score in new_drug]
    
    analyzer = TwoSampleNonparametricTestAnalyzer()
    
    print(f"现有药物样本大小: {len(existing_drug)}")
    print(f"新药样本大小: {len(new_drug)}")
    print(f"现有药物平均疗效: {np.mean(existing_drug):.2f}分")
    print(f"新药平均疗效: {np.mean(new_drug):.2f}分")
    print()
    
    # 样本大小检查
    size_check = analyzer.check_sample_size(existing_drug, new_drug)
    print("样本大小评估:")
    print(json.dumps(size_check, ensure_ascii=False, indent=2))
    print()
    
    # 自动选择方法
    auto_result = analyzer.auto_select_method(existing_drug, new_drug)
    print("推荐检验方法:")
    print(json.dumps(auto_result, ensure_ascii=False, indent=2))
    print()
    
    # 执行Mann-Whitney U检验（非参数检验）
    mw_result = analyzer.mann_whitney_u_test_large(existing_drug, new_drug)
    print("Mann-Whitney U检验结果:")
    print(json.dumps(mw_result, ensure_ascii=False, indent=2))
    print()
    
    # 效应量解释
    effect_size_r = mw_result['effect_size_r']
    if effect_size_r < 0.1:
        effect_size = "小"
    elif effect_size_r < 0.3:
        effect_size = "中等"
    elif effect_size_r < 0.5:
        effect_size = "大"
    else:
        effect_size = "非常大"
    
    print(f"效应量大小: {effect_size} (r = {effect_size_r:.3f})")
    
    # 结论
    if mw_result['reject_null']:
        print("✅ 结论：新药的疗效显著优于现有药物")
    else:
        print("❌ 结论：新药与现有药物的疗效无显著差异")
    
    print("=" * 60)
    print()

def example_4_website_performance_comparison():
    """
    示例4：网站性能对比
    
    场景：技术团队想要比较网站优化前后的页面加载时间是否有显著改善。
    收集了优化前后各200次页面加载的时间数据。
    """
    print("=== 示例4：网站性能对比 ===")
    
    # 模拟页面加载时间数据（秒）
    np.random.seed(789)
    before_optimization = np.random.gamma(2, 1.5, 200).tolist()  # Gamma分布
    after_optimization = np.random.gamma(2, 1.2, 200).tolist()   # 优化后加载更快
    
    analyzer = TwoSampleNonparametricTestAnalyzer()
    
    print(f"优化前样本大小: {len(before_optimization)}")
    print(f"优化后样本大小: {len(after_optimization)}")
    print(f"优化前平均加载时间: {np.mean(before_optimization):.3f}秒")
    print(f"优化后平均加载时间: {np.mean(after_optimization):.3f}秒")
    print()
    
    # 使用Mann-Whitney U检验（非参数检验）
    mw_result = analyzer.mann_whitney_u_test_large(before_optimization, after_optimization)
    print("Mann-Whitney U检验结果:")
    print(json.dumps(mw_result, ensure_ascii=False, indent=2))
    print()
    
    # 同时进行KS检验，检查分布差异
    ks_result = analyzer.kolmogorov_smirnov_test(before_optimization, after_optimization)
    print("Kolmogorov-Smirnov检验结果:")
    print(json.dumps(ks_result, ensure_ascii=False, indent=2))
    print()
    
    # 结论
    if mw_result['reject_null']:
        improvement = np.mean(before_optimization) - np.mean(after_optimization)
        improvement_percent = (improvement / np.mean(before_optimization)) * 100
        print(f"✅ 结论：网站优化显著改善了页面加载时间")
        print(f"   平均改善: {improvement:.3f}秒 ({improvement_percent:.1f}%)")
    else:
        print("❌ 结论：网站优化对页面加载时间无显著影响")
    
    print("=" * 60)
    print()

def example_5_comprehensive_analysis():
    """
    示例5：综合分析流程
    
    展示完整的大样本两样本分析流程，包括数据探索、方法选择、多种检验和结果解释。
    """
    print("=== 示例5：综合分析流程 ===")
    
    # 模拟两组数据
    np.random.seed(999)
    group_a = np.random.normal(100, 15, 120).tolist()
    group_b = np.random.normal(105, 18, 110).tolist()
    
    analyzer = TwoSampleNonparametricTestAnalyzer()
    
    print("步骤1：数据概览")
    print(f"组A: n={len(group_a)}, 均值={np.mean(group_a):.2f}, 标准差={np.std(group_a, ddof=1):.2f}")
    print(f"组B: n={len(group_b)}, 均值={np.mean(group_b):.2f}, 标准差={np.std(group_b, ddof=1):.2f}")
    print()
    
    print("步骤2：样本大小评估")
    size_result = analyzer.check_sample_size(group_a, group_b)
    print(f"总样本量: {size_result['total_size']}")
    print(f"样本类别: {size_result['size_category']}")
    print(f"建议: {size_result['recommendation']}")
    print()
    
    print("步骤3：正态性检验")
    norm_a = analyzer.normality_test(group_a)
    norm_b = analyzer.normality_test(group_b)
    print(f"组A正态性: {norm_a['overall_assessment']['is_normal']}")
    print(f"组B正态性: {norm_b['overall_assessment']['is_normal']}")
    print()
    
    print("步骤4：自动方法选择")
    auto_result = analyzer.auto_select_method(group_a, group_b)
    print(f"推荐方法: {auto_result['selected_method']}")
    print(f"选择理由: {auto_result['reason']}")
    print()
    
    print("步骤5：执行多种非参数检验方法")
    
    # Mann-Whitney U检验
    mw_result = analyzer.mann_whitney_u_test_large(group_a, group_b)
    print(f"Mann-Whitney U检验 p值: {mw_result['p_value']:.4f}, 拒绝原假设: {mw_result['reject_null']}")
    
    # Wilcoxon秩和检验
    wilcoxon_result = analyzer.wilcoxon_rank_sum_test(group_a, group_b)
    print(f"Wilcoxon秩和检验 p值: {wilcoxon_result['p_value']:.4f}, 拒绝原假设: {wilcoxon_result['reject_null']}")
    
    # Kolmogorov-Smirnov检验
    ks_result = analyzer.kolmogorov_smirnov_test(group_a, group_b)
    print(f"Kolmogorov-Smirnov检验 p值: {ks_result['p_value']:.4f}, 拒绝原假设: {ks_result['reject_null']}")
    
    print()
    
    print("步骤6：结果一致性检查")
    results = [mw_result['reject_null'], wilcoxon_result['reject_null'], ks_result['reject_null']]
    
    if all(results):
        print("✅ 所有检验方法都拒绝原假设，结果一致")
    elif not any(results):
        print("❌ 所有检验方法都不拒绝原假设，结果一致")
    else:
        print("⚠️  不同检验方法结果不一致，需要进一步分析")
    
    print("=" * 60)
    print()

if __name__ == "__main__":
    print("大样本两样本非参数检验 MCP 服务使用示例\n")
    
    try:
        example_1_product_quality_comparison()
        example_2_marketing_campaign_effectiveness()
        example_3_drug_efficacy_study()
        example_4_website_performance_comparison()
        example_5_comprehensive_analysis()
        
        print("\n🎉 所有示例运行完成！")
        print("\n💡 使用建议:")
        print("1. 根据数据特征选择合适的非参数检验方法")
        print("2. 大样本情况下使用大样本近似版本的非参数检验")
        print("3. Mann-Whitney U检验适用于位置参数比较")
        print("4. Kolmogorov-Smirnov检验适用于分布形状比较")
        print("5. 关注效应量大小，不仅仅是p值")
        print("6. 多种方法验证，确保结果可靠性")
        
    except Exception as e:
        print(f"示例运行过程中发生错误: {e}")
        import traceback
        traceback.print_exc()